/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controleur;

import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import java.util.Map;
import modele.Article;
import modele.NewHibernateUtil;
import modele.Entreprise;
import modele.Inscrit;
import modele.Offre;
import modele.Personne;
import modele.Profession;
import modele.Promotion;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import org.hibernate.Session;

/**
 *
 * @author pauline
 */
public class Connexion extends ActionSupport implements SessionAware {

    String courrielInscrit, mdpInscrit;
    Session hibernateSession;
    Entreprise entreprise;
    Personne personne;
    Inscrit inscrit;
    List<Article> listeArticle;
    List<Profession> listeProfession;
    List<Promotion> listePromotion;
    SessionMap<String, Object> session;
    List<Offre> listeOffre;

    public Personne getPersonne() {
        return personne;
    }

    public void setPersonne(Personne personne) {
        this.personne = personne;
    }

    public String getMdpInscrit() {
        return mdpInscrit;
    }

    public void setMdpInscrit(String mdpInscrit) {
        this.mdpInscrit = mdpInscrit;
    }

    public String getCourrielInscrit() {
        return courrielInscrit;
    }

    public void setCourrielInscrit(String courrielInscrit) {
        this.courrielInscrit = courrielInscrit;
    }

    public Inscrit getInscrit() {
        return inscrit;
    }

    public void setInscrit(Inscrit inscrit) {
        this.inscrit = inscrit;
    }

    public SessionMap<String, Object> getSession() {
        return session;
    }

    @Override
    public void setSession(Map<String, Object> map) {
        this.session = (SessionMap<String, Object>) map; //To change body of generated methods, choose Tools | Templates.
    }

    public Entreprise getEntreprise() {
        return entreprise;
    }

    public void setEntreprise(Entreprise entreprise) {
        this.entreprise = entreprise;
    }

    @Override
    public String execute() throws Exception {

        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();

        if (this.courrielInscrit != null && this.mdpInscrit != null) {
            inscrit = (Inscrit) hibernateSession.createQuery("from Inscrit where courrielInscrit='" + courrielInscrit + "' AND mdpInscrit='" + mdpInscrit + "'").uniqueResult();
            //if (this.courrielInscrit.equalsIgnoreCase(inscrit.getCourrielInscrit()) && this.mdpInscrit.equals(inscrit.getMdpInscrit())) {
            if (inscrit != null) {
                this.session = getSession();
                this.session.put("allowAccess", "true");

                //return "success";
            } else {
                addActionError("Erreur d'authentification");
                return "error";
            }
        }

        if (inscrit.getStatut()
                .equals("inactif")) {
            addActionError("Erreur personne inactive");
            return "error";
        }
        // PERSONNE
        personne = (Personne) hibernateSession.createQuery("from Personne where idPersonne= " + inscrit.getIdInscrit()).uniqueResult();

        if (personne != null) {
            listeArticle = hibernateSession.createQuery("from Article where idPersonne= " + inscrit.getIdInscrit()).list();
            listeProfession = hibernateSession.createQuery("from Profession where idPersonne= " + inscrit.getIdInscrit()).list();
            listePromotion = hibernateSession.createQuery("select promo from Etudie as promo where idPersonne= " + inscrit.getIdInscrit()).list();
            session.put("mdpInscrit", inscrit.getIdInscrit());
            session.put("courrielInscrit", inscrit.getCourrielInscrit());
            session.put("idPersonne", personne.getIdPersonne());
            session.put("prenom", personne.getPrenomPersonne());
            session.put("nom", personne.getNomPersonne());
            session.put("sexe", personne.getSexePersonne());
            session.put("ville", personne.getVillePersonne());
            session.put("telephone", personne.getTelPersonne());
            session.put("dateNaissance", personne.getDateNaissancePersonne());
            session.put("listeArticle", listeArticle);
            session.put("listeProfession", listeProfession);
            session.put("listePromotion", listePromotion);
        }


        if (personne != null && personne.getEstAdmin()) {
            return "admin";
        } else if (personne != null && !personne.getEstAdmin()) {
            return "alumni";
        } // } 
        else {
            // ENTREPRISE
            entreprise = (Entreprise) hibernateSession.createQuery("from Entreprise where idEntreprise=" + inscrit.getIdInscrit()).uniqueResult();
            
            
            if (entreprise != null) {
                listeOffre = hibernateSession.createQuery("select pers from Offre as pers where pers.entreprise.idEntreprise=" + inscrit.getIdInscrit()).list();
                session.put("listeOffre", listeOffre);
                session.put("nomEntreprise", entreprise.getNomEntreprise());
                session.put("descriptionEntreprise", entreprise.getDescriptionEntreprise());
                session.put("urlEntreprise", entreprise.getUrlEntreprise());
                session.put("telEntreprise", entreprise.getTelEntreprise());
                session.put("idEntreprise", entreprise.getIdEntreprise());
                session.put("addEntreprise", entreprise.getAddEntreprise());
                session.put("idEntreprise", entreprise.getIdEntreprise());
                session.put("courrielEntreprise", inscrit.getCourrielInscrit());
                return "entreprise";
            }
        }
        addActionError("Erreur d'authentification");
        return "error";
    }

    public List<Article> getListeArticle() {
        return listeArticle;
    }

    public void setListeArticle(List<Article> listeArticle) {
        this.listeArticle = listeArticle;
    }

    public List<Profession> getListeProfession() {
        return listeProfession;
    }

    public void setListeProfession(List<Profession> listeProfession) {
        this.listeProfession = listeProfession;
    }

    public List<Promotion> getListePromotion() {
        return listePromotion;
    }

    public void setListePromotion(List<Promotion> listePromotion) {
        this.listePromotion = listePromotion;
    }

    public String deleteSession() throws Exception {
        session.clear();
        return "success";
    }

    /**
     * @return the listeOffre
     */
    public List<Offre> getListeOffre() {
        return listeOffre;
    }

    /**
     * @param listeOffre the listeOffre to set
     */
    public void setListeOffre(List<Offre> listeOffre) {
        this.listeOffre = listeOffre;
    }

}
